cssanimatedstyle: Apply animation values after creation
authorBenjamin Otte <otte@redhat.com>
Tue, 16 Dec 2014 04:57:36 +0000 (05:57 +0100)
committerBenjamin Otte <otte@redhat.com>
Wed, 7 Jan 2015 13:26:47 +0000 (14:26 +0100)
This makes GtkCssAnimatedStyle immutable.

gtk/gtkcssanimatedstyle.c
gtk/gtkstylecontext.c

index efdbe12f95be69bb1ab1bd53cef1195ef32abe00..b8c0d9a26943d12f23d2d40f07593a07df4521f4 100644 (file)
@@ -435,8 +435,11 @@ gtk_css_animated_style_new (GtkCssStyle             *base_style,
   result = g_object_new (GTK_TYPE_CSS_ANIMATED_STYLE, NULL);
 
   result->style = g_object_ref (base_style);
+  result->current_time = timestamp;
   result->animations = animations;
 
+  gtk_css_animated_style_apply_animations (result, timestamp);
+
   return GTK_CSS_STYLE (result);
 }
 
index fb227d4b09ed9e15b8992afa11d2e82af56f1d70..401a5601bc338c50244805f204162044b52028a1 100644 (file)
@@ -2829,16 +2829,7 @@ _gtk_style_context_validate (GtkStyleContext  *context,
                                            priv->scale,
                                            gtk_style_context_should_create_transitions (context) ? current : NULL);
 
-      if (!GTK_IS_CSS_ANIMATED_STYLE (values) ||
-          gtk_css_animated_style_is_static (GTK_CSS_ANIMATED_STYLE (values)))
-        {
-          change &= ~GTK_CSS_CHANGE_ANIMATE;
-        }
-      else
-        {
-          change |= GTK_CSS_CHANGE_ANIMATE;
-          style_info_set_values (info, values);
-        }
+      style_info_set_values (info, values);
       _gtk_style_context_update_animating (context);
 
       if (current)
@@ -2855,6 +2846,8 @@ _gtk_style_context_validate (GtkStyleContext  *context,
     }
   else
     {
+      gtk_style_context_update_cache (context, parent_changes);
+
       changes = gtk_css_style_compute_dependencies (current, parent_changes);
       if (!_gtk_bitmask_is_empty (changes))
         {
@@ -2864,31 +2857,29 @@ _gtk_style_context_validate (GtkStyleContext  *context,
            update_properties (context, current, info->decl, changes);
         }
 
-      gtk_style_context_update_cache (context, parent_changes);
-    }
-
-  if (current)
-    g_object_unref (current);
-
-  if (change & GTK_CSS_CHANGE_ANIMATE &&
-      gtk_style_context_is_animating (context))
-    {
-      GtkCssStyle *new_values;
-      GtkBitmask *animation_changes;
+      if (change & GTK_CSS_CHANGE_ANIMATE &&
+          gtk_style_context_is_animating (context))
+        {
+          GtkCssStyle *new_values;
+          GtkBitmask *animation_changes;
 
-      new_values = gtk_css_animated_style_new_advance (GTK_CSS_ANIMATED_STYLE (info->values), timestamp);
-      animation_changes = gtk_css_style_get_difference (new_values, info->values);
-      style_info_set_values (info, new_values);
-      g_object_unref (new_values);
+          new_values = gtk_css_animated_style_new_advance (GTK_CSS_ANIMATED_STYLE (info->values), timestamp);
+          animation_changes = gtk_css_style_get_difference (new_values, info->values);
+          style_info_set_values (info, new_values);
+          g_object_unref (new_values);
 
-      changes = _gtk_bitmask_union (changes, animation_changes);
-      _gtk_bitmask_free (animation_changes);
+          changes = _gtk_bitmask_union (changes, animation_changes);
+          _gtk_bitmask_free (animation_changes);
 
-      if (!GTK_IS_CSS_ANIMATED_STYLE (info->values) ||
-          gtk_css_animated_style_is_static (GTK_CSS_ANIMATED_STYLE (info->values)))
-        _gtk_style_context_update_animating (context);
+          if (!GTK_IS_CSS_ANIMATED_STYLE (info->values) ||
+              gtk_css_animated_style_is_static (GTK_CSS_ANIMATED_STYLE (info->values)))
+            _gtk_style_context_update_animating (context);
+        }
     }
 
+  if (current)
+    g_object_unref (current);
+
   if (!_gtk_bitmask_is_empty (changes))
     gtk_style_context_do_invalidate (context, changes);